#pragma once
#include "Commd.hpp"
#include <fcntl.h>
#include <openssl/bio.h>

//默认让服务器创建命名管道
class Init
{
  public:
  Init()
  {
    umask(0);
    int n = mkfifo(gpipeFile.c_str(), gmode);
    if (n < 0)
    {
      std::cerr << "mkfifo error" << std::endl;
      return;
    }
    std::cout << "mkfifo sucess" << std::endl;
    //sleep(10);
  }
  ~Init()
  {
    int n = unlink(gpipeFile.c_str());
    if (n < 0)
    {
      std::cerr << "unlink error" << std::endl;
      return;
    }
    std::cout << "unlink sucess" << std::endl;
  }
};
//创建全局对象，当程序运行时就建立管道
Init init;

class Server
{
  public:
  Server():_fd(gdefault)
  {}

  //打开管道
  bool OpenPipeForRead()
  {
    _fd = OpenPipe(gRead);
    if(_fd < 0)
    {
      return false;
    }
    return true;
  }

  //读取数据
  //参数为输出型
  int RecvPipe(std::string*out)
  {
    char buffer[gsize];
    ssize_t n = ::read(_fd,buffer,sizeof(buffer)-1);
    if(n > 0)
    {
      buffer[n] = 0;
      *out = buffer;
    }
    return n;
  }

  //关闭管道
  void ClosePipe()
  {
    ClosePipeHelper(_fd);
  }

  ~Server()
  {}


  private:
  int _fd;
};